﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.DAL;
using System.ComponentModel.DataAnnotations;

namespace Libreria.SICOM.Modelo
{
     [CAD(true, CAD.TiposBD._SQLServer)]
    public class Variable
    {
        // Atributo de abstracción
        public MOR accesoADatos;
        private Int32? identificador;
        private String nombre;
         private Int32? unidad;

         public Variable()
         {

         }
         public Variable(String CadenaDeConexion)
         {
             this.accesoADatos = MOR.Instance(CadenaDeConexion);
         }

         //Encapsulamiento y mapeo de atributos
         [Tipo(Tipo.TiposSQLServer._int, "VAR_ID", true,false)]
         [Required(ErrorMessage = "***Campo Codigo obligatorio***")]
         public Int32? Identificador
         {
             get { return identificador; }
             set { identificador = value; }
         }
         //Encapsulamiento y mapeo de atributos
         [Tipo(Tipo.TiposSQLServer._varchar, "VAR_NOMBRE")]
         [Required(ErrorMessage = "***Campo Nombre obligatorio***")]
         public String Nombre
         {
             get { return nombre; }
             set { nombre = value; }
         }

         //Encapsulamiento y mapeo de atributos
         [Tipo(Tipo.TiposSQLServer._int, "UNI_ID")]
         [Required(ErrorMessage = "***Campo Unidad obligatorio***")]
         public Int32? Unidad
         {
             get { return unidad; }
             set { unidad = value; }
         }

         // Métodos de abstracción de datos
         public void crear()
         {
             this.accesoADatos.crearRegistro(this);
         }

         public List<Variable> consultar()
         {
             List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
             List<Variable> resultado = new List<Variable>();
             foreach (Object registro in registros)
             {
                 resultado.Add((Variable)registro);
             }
             return resultado;
         }

         public Variable consultarPorIdentificador(Int32? identificador)
         {
             this.identificador = identificador;
             List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
             Variable resultado = null;
             if (registros != null)
             {
                 if (registros.Count == 1)
                 {
                     resultado = (Variable)registros[0];
                 }
             }
             return resultado;
         }

         public void actualizar()
         {
             this.accesoADatos.actualizarRegistro(this);
         }

         public void eliminar()
         {
             this.accesoADatos.borrarRegistro(this);
         }



    }
}
